001 /** 002 * Created by IntelliJ IDEA. 003 * User: Wei Wang 004 * Date: Jan 9, 2003 005 * Time: 10:16:34 PM 006 */ 007 008 package EVolve.util.equators; 009 010 import java.util.*; 011 012 public class UnorderedSet extends Set{ 013 private HashMap data; 014 015 public UnorderedSet(int interval) { 016 data = new HashMap(); 017 size = interval; 018 emptySlot = 0; 019 } 020 021 public boolean exist(long element) { 022 023 return data.containsKey(new Long(element)); 024 025 } 026 027 public Set newSet() { 028 return new UnorderedSet(size); 029 } 030 031 public long getElement(int index) { 032 Iterator it = data.keySet().iterator(); 033 int i = 0; 034 while (it.hasNext()) { 035 Long key = (Long)it.next(); 036 if (i<index) continue; 037 return key.longValue(); 038 } 039 return -1; 040 } 041 042 public void addElement(long element) { 043 if (emptySlot>=size) { 044 System.out.println("Set is full, unable to add new elements!!!"); 045 return; 046 } 047 Long key = new Long(element); 048 if (data.containsKey(key)) { 049 Long value = (Long)data.get(key); 050 data.put(key, new Long(value.longValue()+1)); 051 } else { 052 data.put(key, new Long(1)); 053 } 054 emptySlot++; 055 } 056 057 public Set union(Set set) { 058 Set result = new UnorderedSet(size*2); 059 HashMap setData[] = new HashMap[2]; 060 061 setData[0] = data; 062 setData[1] = ((UnorderedSet)set).data; 063 064 for (int i=0; i<setData.length; i++) { 065 Iterator it = setData[i].keySet().iterator(); 066 while (it.hasNext()) { 067 result.addElement(((Long)it.next()).longValue()); 068 } 069 } 070 071 return result; 072 } 073 074 public Set intersection(Set set) { 075 HashMap setData[] = new HashMap[2]; 076 Set result = new UnorderedSet(size); 077 078 setData[0] = data; 079 setData[1] = ((UnorderedSet)set).data; 080 081 Iterator it = setData[0].keySet().iterator(); 082 while (it.hasNext()) { 083 Long key = (Long)it.next(); 084 if (setData[1].containsKey(key)) 085 result.addElement(key.longValue()); 086 } 087 088 return result; 089 } 090 091 public boolean equals(Set set, float percent) { 092 float counter = 0; 093 HashMap setData[] = new HashMap[2]; 094 095 setData[0] = data; 096 setData[1] = ((UnorderedSet)set).data; 097 098 Iterator it = setData[0].keySet().iterator(); 099 while (it.hasNext()) { 100 Long key = (Long)it.next(); 101 if (setData[1].containsKey(key)) 102 counter = counter + ((Long)setData[0].get(key)).longValue()+((Long)setData[1].get(key)).longValue(); 103 } 104 105 return ((100*counter/(2*size)) >= percent); 106 } 107 108 public long getHashValue() { 109 long result = 0; 110 111 112 Iterator it = data.keySet().iterator(); 113 while (it.hasNext()) { 114 Long key = (Long)it.next(); 115 result = result ^ key.intValue(); 116 } 117 118 return result; 119 } 120 121 public long getEntityId(int i) { 122 if (data.size() == 0) 123 return -1; 124 125 Iterator it = data.keySet().iterator(); 126 127 return ((Long)it.next()).longValue(); 128 } 129 130 public Object clone() { 131 return super.clone(); 132 } 133 }